Autogenerated HTML docs for v2.6.0-rc2 
diff --git a/RelNotes/2.6.0.txt b/RelNotes/2.6.0.txt index 870df85..7d65c16 100644 --- a/RelNotes/2.6.0.txt +++ b/RelNotes/2.6.0.txt 
@@ -84,6 +84,12 @@  * "git config --list" output was hard to parse when values consist of  multiple lines. "--name-only" option is added to help this.   + * A handful of usability & cosmetic fixes to gitk and l10n updates. + + * A completely empty e-mail address <> is now allowed in the authors + file used by git-svn, to match the way it accepts the output from + authors-prog. +    Performance, Internal Implementation, Development Support etc.   @@ -349,3 +355,5 @@  (merge b8c1d27 ah/pack-objects-usage-strings later to maint).  (merge 486e1e1 br/svn-doc-include-paths-config later to maint).  (merge 1733ed3 ee/clean-test-fixes later to maint). + (merge 5fcadc3 gb/apply-comment-typofix later to maint). + (merge b894d3e mp/t7060-diff-index-test later to maint). 
diff --git a/git.html b/git.html index 60a5c63..3eba583 100644 --- a/git.html +++ b/git.html 
@@ -2985,7 +2985,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-08-28 14:10:22 PDT  +Last updated 2015-09-10 13:07:35 PDT   </div>   </div>   </body>  
diff --git a/howto-index.html b/howto-index.html index efb7117..1edc9a7 100644 --- a/howto-index.html +++ b/howto-index.html 
@@ -883,7 +883,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-09-08 16:57:22 PDT  +Last updated 2015-09-14 14:09:10 PDT   </div>   </div>   </body>  
diff --git a/howto/keep-canonical-history-correct.html b/howto/keep-canonical-history-correct.html index 643a261..f7b91f2 100644 --- a/howto/keep-canonical-history-correct.html +++ b/howto/keep-canonical-history-correct.html 
@@ -936,7 +936,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-09-08 16:57:28 PDT  +Last updated 2015-09-14 14:09:16 PDT   </div>   </div>   </body>  
diff --git a/howto/maintain-git.html b/howto/maintain-git.html index a565e25..894c127 100644 --- a/howto/maintain-git.html +++ b/howto/maintain-git.html 
@@ -1433,7 +1433,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-09-08 16:57:28 PDT  +Last updated 2015-09-14 14:09:16 PDT   </div>   </div>   </body>  
diff --git a/howto/new-command.html b/howto/new-command.html index 3780614..4e01d66 100644 --- a/howto/new-command.html +++ b/howto/new-command.html 
@@ -861,7 +861,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-09-08 16:57:24 PDT  +Last updated 2015-09-14 14:09:12 PDT   </div>   </div>   </body>  
diff --git a/howto/rebase-from-internal-branch.html b/howto/rebase-from-internal-branch.html index 16461cf..1b63966 100644 --- a/howto/rebase-from-internal-branch.html +++ b/howto/rebase-from-internal-branch.html 
@@ -893,7 +893,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-09-08 16:57:28 PDT  +Last updated 2015-09-14 14:09:16 PDT   </div>   </div>   </body>  
diff --git a/howto/rebuild-from-update-hook.html b/howto/rebuild-from-update-hook.html index 4ba29e7..db4496c 100644 --- a/howto/rebuild-from-update-hook.html +++ b/howto/rebuild-from-update-hook.html 
@@ -845,7 +845,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-09-08 16:57:28 PDT  +Last updated 2015-09-14 14:09:16 PDT   </div>   </div>   </body>  
diff --git a/howto/recover-corrupted-blob-object.html b/howto/recover-corrupted-blob-object.html index 803df1b..264a35a 100644 --- a/howto/recover-corrupted-blob-object.html +++ b/howto/recover-corrupted-blob-object.html 
@@ -878,7 +878,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-09-08 16:57:27 PDT  +Last updated 2015-09-14 14:09:15 PDT   </div>   </div>   </body>  
diff --git a/howto/recover-corrupted-object-harder.html b/howto/recover-corrupted-object-harder.html index 90bfc00..dcc38f8 100644 --- a/howto/recover-corrupted-object-harder.html +++ b/howto/recover-corrupted-object-harder.html 
@@ -1187,7 +1187,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-09-08 16:57:27 PDT  +Last updated 2015-09-14 14:09:15 PDT   </div>   </div>   </body>  
diff --git a/howto/revert-a-faulty-merge.html b/howto/revert-a-faulty-merge.html index 1603468..8ed7bdc 100644 --- a/howto/revert-a-faulty-merge.html +++ b/howto/revert-a-faulty-merge.html 
@@ -1023,7 +1023,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-09-08 16:57:27 PDT  +Last updated 2015-09-14 14:09:15 PDT   </div>   </div>   </body>  
diff --git a/howto/revert-branch-rebase.html b/howto/revert-branch-rebase.html index 7ea5ccd..1a47ef3 100644 --- a/howto/revert-branch-rebase.html +++ b/howto/revert-branch-rebase.html 
@@ -905,7 +905,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-09-08 16:57:24 PDT  +Last updated 2015-09-14 14:09:12 PDT   </div>   </div>   </body>  
diff --git a/howto/separating-topic-branches.html b/howto/separating-topic-branches.html index 0a38d00..2699d01 100644 --- a/howto/separating-topic-branches.html +++ b/howto/separating-topic-branches.html 
@@ -839,7 +839,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-09-08 16:57:26 PDT  +Last updated 2015-09-14 14:09:15 PDT   </div>   </div>   </body>  
diff --git a/howto/setup-git-server-over-http.html b/howto/setup-git-server-over-http.html index cdc787a..c7acd56 100644 --- a/howto/setup-git-server-over-http.html +++ b/howto/setup-git-server-over-http.html 
@@ -1069,7 +1069,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-09-08 16:57:26 PDT  +Last updated 2015-09-14 14:09:14 PDT   </div>   </div>   </body>  
diff --git a/howto/update-hook-example.html b/howto/update-hook-example.html index 088bf73..0b0fa25 100644 --- a/howto/update-hook-example.html +++ b/howto/update-hook-example.html 
@@ -928,7 +928,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-09-08 16:57:26 PDT  +Last updated 2015-09-14 14:09:14 PDT   </div>   </div>   </body>  
diff --git a/howto/use-git-daemon.html b/howto/use-git-daemon.html index de59d0b..6201a83 100644 --- a/howto/use-git-daemon.html +++ b/howto/use-git-daemon.html 
@@ -789,7 +789,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-09-08 16:57:25 PDT  +Last updated 2015-09-14 14:09:13 PDT   </div>   </div>   </body>  
diff --git a/howto/using-merge-subtree.html b/howto/using-merge-subtree.html index 147b901..8347de6 100644 --- a/howto/using-merge-subtree.html +++ b/howto/using-merge-subtree.html 
@@ -846,7 +846,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-09-08 16:57:25 PDT  +Last updated 2015-09-14 14:09:12 PDT   </div>   </div>   </body>  
diff --git a/howto/using-signed-tag-in-pull-request.html b/howto/using-signed-tag-in-pull-request.html index a0e8477..2ae8f8f 100644 --- a/howto/using-signed-tag-in-pull-request.html +++ b/howto/using-signed-tag-in-pull-request.html 
@@ -950,7 +950,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-09-08 16:57:25 PDT  +Last updated 2015-09-14 14:09:13 PDT   </div>   </div>   </body>  
diff --git a/technical/api-index.html b/technical/api-index.html index 43f6b6d..74dca3c 100644 --- a/technical/api-index.html +++ b/technical/api-index.html 
@@ -898,7 +898,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-09-08 16:57:36 PDT  +Last updated 2015-09-14 14:09:25 PDT   </div>   </div>   </body>  
diff --git a/technical/pack-protocol.html b/technical/pack-protocol.html index 7c55863..8d849a2 100644 --- a/technical/pack-protocol.html +++ b/technical/pack-protocol.html 
@@ -752,6 +752,15 @@  </div>   </div>   <div class="sect1">  +<h2 id="_pkt_line_format">pkt-line Format</h2>  +<div class="sectionbody">  +<div class="paragraph"><p>The descriptions below build on the pkt-line format described in  +protocol-common.txt. When the grammar indicate <code>PKT-LINE(...)</code>, unless  +otherwise noted the usual pkt-line LF rules apply: the sender SHOULD  +include a LF, but the receiver MUST NOT complain if it is not present.</p></div>  +</div>  +</div>  +<div class="sect1">   <h2 id="_transports">Transports</h2>   <div class="sectionbody">   <div class="paragraph"><p>There are three transports over which the packfile protocol is  @@ -897,8 +906,6 @@  003fe92df48743b7bc7d26bcaabfddde0a1e20cae47c refs/tags/v1.0^{}   0000</code></pre>   </div></div>  -<div class="paragraph"><p>Server SHOULD terminate each non-flush line using LF ("\n") terminator;  -client MUST NOT complain if there is no terminator.</p></div>   <div class="paragraph"><p>The returned response is a pkt-line stream describing each ref and   its current value. The stream MUST be sorted by name according to   the C locale ordering.</p></div>  @@ -916,15 +923,15 @@  flush-pkt     no-refs = PKT-LINE(zero-id SP "capabilities^{}"  - NUL capability-list LF)  + NUL capability-list)     list-of-refs = first-ref *other-ref   first-ref = PKT-LINE(obj-id SP refname  - NUL capability-list LF)  + NUL capability-list)     other-ref = PKT-LINE(other-tip / other-peeled)  - other-tip = obj-id SP refname LF  - other-peeled = obj-id SP refname "^{}" LF  + other-tip = obj-id SP refname  + other-peeled = obj-id SP refname "^{}"     shallow = PKT-LINE("shallow" SP obj-id)    @@ -966,8 +973,8 @@    depth-request = PKT-LINE("deepen" SP depth)    - first-want = PKT-LINE("want" SP obj-id SP capability-list LF)  - additional-want = PKT-LINE("want" SP obj-id LF)  + first-want = PKT-LINE("want" SP obj-id SP capability-list)  + additional-want = PKT-LINE("want" SP obj-id)     depth = 1*DIGIT</code></pre>   </div></div>  @@ -1026,7 +1033,7 @@  compute-end     have-list = *have-line  - have-line = PKT-LINE("have" SP obj-id LF)  + have-line = PKT-LINE("have" SP obj-id)   compute-end = flush-pkt / PKT-LINE("done")</code></pre>   </div></div>   <div class="paragraph"><p>If the server reads <em>have</em> lines, it then will respond by ACKing any  @@ -1106,10 +1113,10 @@  <div class="listingblock">   <div class="content">   <pre><code> server-response = *ack_multi ack / nak  - ack_multi = PKT-LINE("ACK" SP obj-id ack_status LF)  + ack_multi = PKT-LINE("ACK" SP obj-id ack_status)   ack_status = "continue" / "common" / "ready"  - ack = PKT-LINE("ACK SP obj-id LF)  - nak = PKT-LINE("NAK" LF)</code></pre>  + ack = PKT-LINE("ACK" SP obj-id)  + nak = PKT-LINE("NAK")</code></pre>   </div></div>   <div class="paragraph"><p>A simple clone may look like this (with no <em>have</em> lines):</p></div>   <div class="listingblock">  @@ -1219,10 +1226,10 @@  <div class="content">   <pre><code> update-request = *shallow ( command-list | push-cert ) [packfile]    - shallow = PKT-LINE("shallow" SP obj-id LF)  + shallow = PKT-LINE("shallow" SP obj-id)    - command-list = PKT-LINE(command NUL capability-list LF)  - *PKT-LINE(command LF)  + command-list = PKT-LINE(command NUL capability-list)  + *PKT-LINE(command)   flush-pkt     command = create / delete / update  @@ -1269,7 +1276,8 @@  <div class="sectionbody">   <div class="paragraph"><p>A push certificate begins with a set of header lines. After the   header and an empty line, the protocol commands follow, one per  -line.</p></div>  +line. Note that the the trailing LF in push-cert PKT-LINEs is <em>not</em>  +optional; it must be present.</p></div>   <div class="paragraph"><p>Currently, the following header fields are defined:</p></div>   <div class="dlist"><dl>   <dt class="hdlist1">  @@ -1324,12 +1332,12 @@  1*(command-status)   flush-pkt    - unpack-status = PKT-LINE("unpack" SP unpack-result LF)  + unpack-status = PKT-LINE("unpack" SP unpack-result)   unpack-result = "ok" / error-msg     command-status = command-ok / command-fail  - command-ok = PKT-LINE("ok" SP refname LF)  - command-fail = PKT-LINE("ng" SP refname SP error-msg LF)  + command-ok = PKT-LINE("ok" SP refname)  + command-fail = PKT-LINE("ng" SP refname SP error-msg)     error-msg = 1*(OCTECT) ; where not "ok"</code></pre>   </div></div>  @@ -1363,7 +1371,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-06-16 15:07:26 PDT  +Last updated 2015-09-14 14:08:19 PDT   </div>   </div>   </body>  
diff --git a/technical/pack-protocol.txt b/technical/pack-protocol.txt index 4064fc7..c6977bb 100644 --- a/technical/pack-protocol.txt +++ b/technical/pack-protocol.txt 
@@ -14,6 +14,14 @@  currently on the server, then for the two to negotiate the smallest amount  of data to send in order to fully update one or the other.   +pkt-line Format +--------------- + +The descriptions below build on the pkt-line format described in +protocol-common.txt. When the grammar indicate `PKT-LINE(...)`, unless +otherwise noted the usual pkt-line LF rules apply: the sender SHOULD +include a LF, but the receiver MUST NOT complain if it is not present. +  Transports  ----------  There are three transports over which the packfile protocol is @@ -143,9 +151,6 @@  003fe92df48743b7bc7d26bcaabfddde0a1e20cae47c refs/tags/v1.0^{}  0000   -Server SHOULD terminate each non-flush line using LF ("\n") terminator; -client MUST NOT complain if there is no terminator. -  The returned response is a pkt-line stream describing each ref and  its current value. The stream MUST be sorted by name according to  the C locale ordering. @@ -165,15 +170,15 @@  flush-pkt    no-refs = PKT-LINE(zero-id SP "capabilities^{}" - NUL capability-list LF) + NUL capability-list)    list-of-refs = first-ref *other-ref  first-ref = PKT-LINE(obj-id SP refname - NUL capability-list LF) + NUL capability-list)    other-ref = PKT-LINE(other-tip / other-peeled) - other-tip = obj-id SP refname LF - other-peeled = obj-id SP refname "^{}" LF + other-tip = obj-id SP refname + other-peeled = obj-id SP refname "^{}"    shallow = PKT-LINE("shallow" SP obj-id)   @@ -216,8 +221,8 @@    depth-request = PKT-LINE("deepen" SP depth)   - first-want = PKT-LINE("want" SP obj-id SP capability-list LF) - additional-want = PKT-LINE("want" SP obj-id LF) + first-want = PKT-LINE("want" SP obj-id SP capability-list) + additional-want = PKT-LINE("want" SP obj-id)    depth = 1*DIGIT  ---- @@ -284,7 +289,7 @@  compute-end    have-list = *have-line - have-line = PKT-LINE("have" SP obj-id LF) + have-line = PKT-LINE("have" SP obj-id)  compute-end = flush-pkt / PKT-LINE("done")  ----   @@ -348,10 +353,10 @@    ----  server-response = *ack_multi ack / nak - ack_multi = PKT-LINE("ACK" SP obj-id ack_status LF) + ack_multi = PKT-LINE("ACK" SP obj-id ack_status)  ack_status = "continue" / "common" / "ready" - ack = PKT-LINE("ACK SP obj-id LF) - nak = PKT-LINE("NAK" LF) + ack = PKT-LINE("ACK" SP obj-id) + nak = PKT-LINE("NAK")  ----    A simple clone may look like this (with no 'have' lines): @@ -467,10 +472,10 @@  ----  update-request = *shallow ( command-list | push-cert ) [packfile]   - shallow = PKT-LINE("shallow" SP obj-id LF) + shallow = PKT-LINE("shallow" SP obj-id)   - command-list = PKT-LINE(command NUL capability-list LF) - *PKT-LINE(command LF) + command-list = PKT-LINE(command NUL capability-list) + *PKT-LINE(command)  flush-pkt    command = create / delete / update @@ -521,7 +526,8 @@    A push certificate begins with a set of header lines. After the  header and an empty line, the protocol commands follow, one per -line. +line. Note that the the trailing LF in push-cert PKT-LINEs is _not_ +optional; it must be present.    Currently, the following header fields are defined:   @@ -560,12 +566,12 @@  1*(command-status)  flush-pkt   - unpack-status = PKT-LINE("unpack" SP unpack-result LF) + unpack-status = PKT-LINE("unpack" SP unpack-result)  unpack-result = "ok" / error-msg    command-status = command-ok / command-fail - command-ok = PKT-LINE("ok" SP refname LF) - command-fail = PKT-LINE("ng" SP refname SP error-msg LF) + command-ok = PKT-LINE("ok" SP refname) + command-fail = PKT-LINE("ng" SP refname SP error-msg)    error-msg = 1*(OCTECT) ; where not "ok"  ---- 
diff --git a/technical/protocol-common.html b/technical/protocol-common.html index 206f1de..96859fd 100644 --- a/technical/protocol-common.html +++ b/technical/protocol-common.html 
@@ -820,7 +820,10 @@  <div class="paragraph"><p>A pkt-line MAY contain binary data, so implementors MUST ensure   pkt-line parsing/formatting routines are 8-bit clean.</p></div>   <div class="paragraph"><p>A non-binary line SHOULD BE terminated by an LF, which if present  -MUST be included in the total length.</p></div>  +MUST be included in the total length. Receivers MUST treat pkt-lines  +with non-binary data the same whether or not they contain the trailing  +LF (stripping the LF if present, and not complaining when it is  +missing).</p></div>   <div class="paragraph"><p>The maximum length of a pkt-line&#8217;s data component is 65520 bytes.   Implementations MUST NOT send pkt-line whose length exceeds 65524   (65520 bytes of payload + 4 bytes of length data).</p></div>  @@ -854,7 +857,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2014-04-08 12:47:26 PDT  +Last updated 2015-09-14 14:08:19 PDT   </div>   </div>   </body>  
diff --git a/technical/protocol-common.txt b/technical/protocol-common.txt index 889985f..bf30167 100644 --- a/technical/protocol-common.txt +++ b/technical/protocol-common.txt 
@@ -62,7 +62,10 @@  pkt-line parsing/formatting routines are 8-bit clean.    A non-binary line SHOULD BE terminated by an LF, which if present -MUST be included in the total length. +MUST be included in the total length. Receivers MUST treat pkt-lines +with non-binary data the same whether or not they contain the trailing +LF (stripping the LF if present, and not complaining when it is +missing).    The maximum length of a pkt-line's data component is 65520 bytes.  Implementations MUST NOT send pkt-line whose length exceeds 65524 
diff --git a/user-manual.html b/user-manual.html index db5b44b..5c18c05 100644 --- a/user-manual.html +++ b/user-manual.html 
@@ -1,5 +1,5 @@  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> -<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Git User Manual</title><link rel="stylesheet" type="text/css" href="docbook-xsl.css"><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div lang="en" class="article"><div class="titlepage"><div><div><h2 class="title"><a name="idp49188592"></a>Git User Manual</h2></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#repositories-and-branches">Repositories and Branches</a></span></dt><dd><dl><dt><span class="section"><a href="#how-to-get-a-git-repository">How to get a Git repository</a></span></dt><dt><span class="section"><a href="#how-to-check-out">How to check out a different version of a project</a></span></dt><dt><span class="section"><a href="#understanding-commits">Understanding History: Commits</a></span></dt><dt><span class="section"><a href="#manipulating-branches">Manipulating branches</a></span></dt><dt><span class="section"><a href="#detached-head">Examining an old version without creating a new branch</a></span></dt><dt><span class="section"><a href="#examining-remote-branches">Examining branches from a remote repository</a></span></dt><dt><span class="section"><a href="#how-git-stores-references">Naming branches, tags, and other references</a></span></dt><dt><span class="section"><a href="#Updating-a-repository-With-git-fetch">Updating a repository with git fetch</a></span></dt><dt><span class="section"><a href="#fetching-branches">Fetching branches from other repositories</a></span></dt></dl></dd><dt><span class="section"><a href="#exploring-git-history">Exploring Git history</a></span></dt><dd><dl><dt><span class="section"><a href="#using-bisect">How to use bisect to find a regression</a></span></dt><dt><span class="section"><a href="#naming-commits">Naming commits</a></span></dt><dt><span class="section"><a href="#creating-tags">Creating tags</a></span></dt><dt><span class="section"><a href="#browsing-revisions">Browsing revisions</a></span></dt><dt><span class="section"><a href="#generating-diffs">Generating diffs</a></span></dt><dt><span class="section"><a href="#viewing-old-file-versions">Viewing old file versions</a></span></dt><dt><span class="section"><a href="#history-examples">Examples</a></span></dt></dl></dd><dt><span class="section"><a href="#Developing-With-git">Developing with Git</a></span></dt><dd><dl><dt><span class="section"><a href="#telling-git-your-name">Telling Git your name</a></span></dt><dt><span class="section"><a href="#creating-a-new-repository">Creating a new repository</a></span></dt><dt><span class="section"><a href="#how-to-make-a-commit">How to make a commit</a></span></dt><dt><span class="section"><a href="#creating-good-commit-messages">Creating good commit messages</a></span></dt><dt><span class="section"><a href="#ignoring-files">Ignoring files</a></span></dt><dt><span class="section"><a href="#how-to-merge">How to merge</a></span></dt><dt><span class="section"><a href="#resolving-a-merge">Resolving a merge</a></span></dt><dt><span class="section"><a href="#undoing-a-merge">Undoing a merge</a></span></dt><dt><span class="section"><a href="#fast-forwards">Fast-forward merges</a></span></dt><dt><span class="section"><a href="#fixing-mistakes">Fixing mistakes</a></span></dt><dt><span class="section"><a href="#ensuring-good-performance">Ensuring good performance</a></span></dt><dt><span class="section"><a href="#ensuring-reliability">Ensuring reliability</a></span></dt></dl></dd><dt><span class="section"><a href="#sharing-development">Sharing development with others</a></span></dt><dd><dl><dt><span class="section"><a href="#getting-updates-With-git-pull">Getting updates with git pull</a></span></dt><dt><span class="section"><a href="#submitting-patches">Submitting patches to a project</a></span></dt><dt><span class="section"><a href="#importing-patches">Importing patches to a project</a></span></dt><dt><span class="section"><a href="#public-repositories">Public Git repositories</a></span></dt><dt><span class="section"><a href="#sharing-development-examples">Examples</a></span></dt></dl></dd><dt><span class="section"><a href="#cleaning-up-history">Rewriting history and maintaining patch series</a></span></dt><dd><dl><dt><span class="section"><a href="#patch-series">Creating the perfect patch series</a></span></dt><dt><span class="section"><a href="#using-git-rebase">Keeping a patch series up to date using git rebase</a></span></dt><dt><span class="section"><a href="#rewriting-one-commit">Rewriting a single commit</a></span></dt><dt><span class="section"><a href="#reordering-patch-series">Reordering or selecting from a patch series</a></span></dt><dt><span class="section"><a href="#interactive-rebase">Using interactive rebases</a></span></dt><dt><span class="section"><a href="#patch-series-tools">Other tools</a></span></dt><dt><span class="section"><a href="#problems-With-rewriting-history">Problems with rewriting history</a></span></dt><dt><span class="section"><a href="#bisect-merges">Why bisecting merge commits can be harder than bisecting linear history</a></span></dt></dl></dd><dt><span class="section"><a href="#advanced-branch-management">Advanced branch management</a></span></dt><dd><dl><dt><span class="section"><a href="#fetching-individual-branches">Fetching individual branches</a></span></dt><dt><span class="section"><a href="#fetch-fast-forwards">git fetch and fast-forwards</a></span></dt><dt><span class="section"><a href="#forcing-fetch">Forcing git fetch to do non-fast-forward updates</a></span></dt><dt><span class="section"><a href="#remote-branch-configuration">Configuring remote-tracking branches</a></span></dt></dl></dd><dt><span class="section"><a href="#git-concepts">Git concepts</a></span></dt><dd><dl><dt><span class="section"><a href="#the-object-database">The Object Database</a></span></dt><dt><span class="section"><a href="#the-index">The index</a></span></dt></dl></dd><dt><span class="section"><a href="#submodules">Submodules</a></span></dt><dd><dl><dt><span class="section"><a href="#_pitfalls_with_submodules">Pitfalls with submodules</a></span></dt></dl></dd><dt><span class="section"><a href="#low-level-operations">Low-level Git operations</a></span></dt><dd><dl><dt><span class="section"><a href="#object-manipulation">Object access and manipulation</a></span></dt><dt><span class="section"><a href="#the-workflow">The Workflow</a></span></dt><dt><span class="section"><a href="#examining-the-data">Examining the data</a></span></dt><dt><span class="section"><a href="#merging-multiple-trees">Merging multiple trees</a></span></dt><dt><span class="section"><a href="#merging-multiple-trees-2">Merging multiple trees, continued</a></span></dt></dl></dd><dt><span class="section"><a href="#hacking-git">Hacking Git</a></span></dt><dd><dl><dt><span class="section"><a href="#object-details">Object storage format</a></span></dt><dt><span class="section"><a href="#birdview-on-the-source-code">A birds-eye view of Git’s source code</a></span></dt></dl></dd><dt><span class="section"><a href="#glossary">Git Glossary</a></span></dt><dt><span class="appendix"><a href="#git-quick-start">A. Git Quick Reference</a></span></dt><dd><dl><dt><span class="section"><a href="#quick-creating-a-new-repository">Creating a new repository</a></span></dt><dt><span class="section"><a href="#managing-branches">Managing branches</a></span></dt><dt><span class="section"><a href="#exploring-history">Exploring history</a></span></dt><dt><span class="section"><a href="#making-changes">Making changes</a></span></dt><dt><span class="section"><a href="#merging">Merging</a></span></dt><dt><span class="section"><a href="#sharing-your-changes">Sharing your changes</a></span></dt><dt><span class="section"><a href="#repository-maintenance">Repository maintenance</a></span></dt></dl></dd><dt><span class="appendix"><a href="#todo">B. Notes and todo list for this manual</a></span></dt></dl></div><p>Git is a fast distributed revision control system.</p><p>This manual is designed to be readable by someone with basic UNIX +<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Git User Manual</title><link rel="stylesheet" type="text/css" href="docbook-xsl.css"><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div lang="en" class="article"><div class="titlepage"><div><div><h2 class="title"><a name="idp49278320"></a>Git User Manual</h2></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#repositories-and-branches">Repositories and Branches</a></span></dt><dd><dl><dt><span class="section"><a href="#how-to-get-a-git-repository">How to get a Git repository</a></span></dt><dt><span class="section"><a href="#how-to-check-out">How to check out a different version of a project</a></span></dt><dt><span class="section"><a href="#understanding-commits">Understanding History: Commits</a></span></dt><dt><span class="section"><a href="#manipulating-branches">Manipulating branches</a></span></dt><dt><span class="section"><a href="#detached-head">Examining an old version without creating a new branch</a></span></dt><dt><span class="section"><a href="#examining-remote-branches">Examining branches from a remote repository</a></span></dt><dt><span class="section"><a href="#how-git-stores-references">Naming branches, tags, and other references</a></span></dt><dt><span class="section"><a href="#Updating-a-repository-With-git-fetch">Updating a repository with git fetch</a></span></dt><dt><span class="section"><a href="#fetching-branches">Fetching branches from other repositories</a></span></dt></dl></dd><dt><span class="section"><a href="#exploring-git-history">Exploring Git history</a></span></dt><dd><dl><dt><span class="section"><a href="#using-bisect">How to use bisect to find a regression</a></span></dt><dt><span class="section"><a href="#naming-commits">Naming commits</a></span></dt><dt><span class="section"><a href="#creating-tags">Creating tags</a></span></dt><dt><span class="section"><a href="#browsing-revisions">Browsing revisions</a></span></dt><dt><span class="section"><a href="#generating-diffs">Generating diffs</a></span></dt><dt><span class="section"><a href="#viewing-old-file-versions">Viewing old file versions</a></span></dt><dt><span class="section"><a href="#history-examples">Examples</a></span></dt></dl></dd><dt><span class="section"><a href="#Developing-With-git">Developing with Git</a></span></dt><dd><dl><dt><span class="section"><a href="#telling-git-your-name">Telling Git your name</a></span></dt><dt><span class="section"><a href="#creating-a-new-repository">Creating a new repository</a></span></dt><dt><span class="section"><a href="#how-to-make-a-commit">How to make a commit</a></span></dt><dt><span class="section"><a href="#creating-good-commit-messages">Creating good commit messages</a></span></dt><dt><span class="section"><a href="#ignoring-files">Ignoring files</a></span></dt><dt><span class="section"><a href="#how-to-merge">How to merge</a></span></dt><dt><span class="section"><a href="#resolving-a-merge">Resolving a merge</a></span></dt><dt><span class="section"><a href="#undoing-a-merge">Undoing a merge</a></span></dt><dt><span class="section"><a href="#fast-forwards">Fast-forward merges</a></span></dt><dt><span class="section"><a href="#fixing-mistakes">Fixing mistakes</a></span></dt><dt><span class="section"><a href="#ensuring-good-performance">Ensuring good performance</a></span></dt><dt><span class="section"><a href="#ensuring-reliability">Ensuring reliability</a></span></dt></dl></dd><dt><span class="section"><a href="#sharing-development">Sharing development with others</a></span></dt><dd><dl><dt><span class="section"><a href="#getting-updates-With-git-pull">Getting updates with git pull</a></span></dt><dt><span class="section"><a href="#submitting-patches">Submitting patches to a project</a></span></dt><dt><span class="section"><a href="#importing-patches">Importing patches to a project</a></span></dt><dt><span class="section"><a href="#public-repositories">Public Git repositories</a></span></dt><dt><span class="section"><a href="#sharing-development-examples">Examples</a></span></dt></dl></dd><dt><span class="section"><a href="#cleaning-up-history">Rewriting history and maintaining patch series</a></span></dt><dd><dl><dt><span class="section"><a href="#patch-series">Creating the perfect patch series</a></span></dt><dt><span class="section"><a href="#using-git-rebase">Keeping a patch series up to date using git rebase</a></span></dt><dt><span class="section"><a href="#rewriting-one-commit">Rewriting a single commit</a></span></dt><dt><span class="section"><a href="#reordering-patch-series">Reordering or selecting from a patch series</a></span></dt><dt><span class="section"><a href="#interactive-rebase">Using interactive rebases</a></span></dt><dt><span class="section"><a href="#patch-series-tools">Other tools</a></span></dt><dt><span class="section"><a href="#problems-With-rewriting-history">Problems with rewriting history</a></span></dt><dt><span class="section"><a href="#bisect-merges">Why bisecting merge commits can be harder than bisecting linear history</a></span></dt></dl></dd><dt><span class="section"><a href="#advanced-branch-management">Advanced branch management</a></span></dt><dd><dl><dt><span class="section"><a href="#fetching-individual-branches">Fetching individual branches</a></span></dt><dt><span class="section"><a href="#fetch-fast-forwards">git fetch and fast-forwards</a></span></dt><dt><span class="section"><a href="#forcing-fetch">Forcing git fetch to do non-fast-forward updates</a></span></dt><dt><span class="section"><a href="#remote-branch-configuration">Configuring remote-tracking branches</a></span></dt></dl></dd><dt><span class="section"><a href="#git-concepts">Git concepts</a></span></dt><dd><dl><dt><span class="section"><a href="#the-object-database">The Object Database</a></span></dt><dt><span class="section"><a href="#the-index">The index</a></span></dt></dl></dd><dt><span class="section"><a href="#submodules">Submodules</a></span></dt><dd><dl><dt><span class="section"><a href="#_pitfalls_with_submodules">Pitfalls with submodules</a></span></dt></dl></dd><dt><span class="section"><a href="#low-level-operations">Low-level Git operations</a></span></dt><dd><dl><dt><span class="section"><a href="#object-manipulation">Object access and manipulation</a></span></dt><dt><span class="section"><a href="#the-workflow">The Workflow</a></span></dt><dt><span class="section"><a href="#examining-the-data">Examining the data</a></span></dt><dt><span class="section"><a href="#merging-multiple-trees">Merging multiple trees</a></span></dt><dt><span class="section"><a href="#merging-multiple-trees-2">Merging multiple trees, continued</a></span></dt></dl></dd><dt><span class="section"><a href="#hacking-git">Hacking Git</a></span></dt><dd><dl><dt><span class="section"><a href="#object-details">Object storage format</a></span></dt><dt><span class="section"><a href="#birdview-on-the-source-code">A birds-eye view of Git’s source code</a></span></dt></dl></dd><dt><span class="section"><a href="#glossary">Git Glossary</a></span></dt><dt><span class="appendix"><a href="#git-quick-start">A. Git Quick Reference</a></span></dt><dd><dl><dt><span class="section"><a href="#quick-creating-a-new-repository">Creating a new repository</a></span></dt><dt><span class="section"><a href="#managing-branches">Managing branches</a></span></dt><dt><span class="section"><a href="#exploring-history">Exploring history</a></span></dt><dt><span class="section"><a href="#making-changes">Making changes</a></span></dt><dt><span class="section"><a href="#merging">Merging</a></span></dt><dt><span class="section"><a href="#sharing-your-changes">Sharing your changes</a></span></dt><dt><span class="section"><a href="#repository-maintenance">Repository maintenance</a></span></dt></dl></dd><dt><span class="appendix"><a href="#todo">B. Notes and todo list for this manual</a></span></dt></dl></div><p>Git is a fast distributed revision control system.</p><p>This manual is designed to be readable by someone with basic UNIX  command-line skills, but no previous knowledge of Git.</p><p><a class="xref" href="#repositories-and-branches" title="Repositories and Branches">the section called “Repositories and Branches”</a> and <a class="xref" href="#exploring-git-history" title="Exploring Git history">the section called “Exploring Git history”</a> explain how  to fetch and study a project using git—read these chapters to learn how  to build and test a particular version of a software project, search for